{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 波士顿(Boston)房价预测"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. load dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train:404 test:102\n",
      "data shape: (404, 13)\n",
      "label shape (404,)\n",
      "------\n",
      "[[1.23247e+00 0.00000e+00 8.14000e+00 0.00000e+00 5.38000e-01 6.14200e+00\n",
      "  9.17000e+01 3.97690e+00 4.00000e+00 3.07000e+02 2.10000e+01 3.96900e+02\n",
      "  1.87200e+01]\n",
      " [2.17700e-02 8.25000e+01 2.03000e+00 0.00000e+00 4.15000e-01 7.61000e+00\n",
      "  1.57000e+01 6.27000e+00 2.00000e+00 3.48000e+02 1.47000e+01 3.95380e+02\n",
      "  3.11000e+00]\n",
      " [4.89822e+00 0.00000e+00 1.81000e+01 0.00000e+00 6.31000e-01 4.97000e+00\n",
      "  1.00000e+02 1.33250e+00 2.40000e+01 6.66000e+02 2.02000e+01 3.75520e+02\n",
      "  3.26000e+00]\n",
      " [3.96100e-02 0.00000e+00 5.19000e+00 0.00000e+00 5.15000e-01 6.03700e+00\n",
      "  3.45000e+01 5.98530e+00 5.00000e+00 2.24000e+02 2.02000e+01 3.96900e+02\n",
      "  8.01000e+00]]\n",
      "------\n",
      "[15.2 42.3 50.  21.1]\n"
     ]
    }
   ],
   "source": [
    "from keras.datasets import boston_housing\n",
    "(train_data, train_labels),(test_data, test_labels) = boston_housing.load_data(r'D:/Python/workspace/jupyter/data/boston_housing.npz')\n",
    "\n",
    "print('train:{} test:{}'.format(len(train_data), len(test_data)))\n",
    "print('data shape:', train_data.shape)\n",
    "print('label shape', train_labels.shape)\n",
    "print('------')\n",
    "print(train_data[:4])\n",
    "print('------')\n",
    "print(train_labels[:4])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.1 format input data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "mean = train_data.mean(axis=0)\n",
    "train_data -= mean\n",
    "std = train_data.std(axis=0)\n",
    "train_data /= std\n",
    "\n",
    "test_data -= mean\n",
    "test_data /= std"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2 train network"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.1 build model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras import layers, models\n",
    "\n",
    "def build_model():\n",
    "    model = models.Sequential()\n",
    "    model.add(layers.Dense(64, activation='relu', input_shape=train_data.shape[1:]))\n",
    "    model.add(layers.Dense(64, activation='relu'))\n",
    "    model.add(layers.Dense(1))\n",
    "    model.compile(optimizer='rmsprop',\n",
    "                 loss='mse',\n",
    "                 metrics=['mae'])\n",
    "    return model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.2 train the model use K-fold validation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epochs:1/4\n",
      "Epochs:2/4\n",
      "Epochs:3/4\n",
      "Epochs:4/4\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "k_fold = 4\n",
    "n_fold = len(train_data)//4\n",
    "epochs = 100\n",
    "\n",
    "all_history = []\n",
    "\n",
    "for i in range(k_fold):\n",
    "    print('Epochs:{}/{}'.format(i + 1, k_fold))\n",
    "    i_l = i*n_fold\n",
    "    i_r = (i+1)*n_fold\n",
    "    x_val = train_data[i_l:i_r]\n",
    "    y_val = train_labels[i_l:i_r]\n",
    "    \n",
    "    x_train = np.concatenate([train_data[:i_l],train_data[i_r:]], axis=0)\n",
    "    y_train = np.concatenate([train_labels[:i_l],train_labels[i_r:]], axis=0)\n",
    "    \n",
    "    model = build_model()\n",
    "    history = model.fit(x_train,\n",
    "             y_train,\n",
    "             validation_data=(x_val, y_val),\n",
    "             epochs=epochs,\n",
    "             batch_size=1,verbose=0)\n",
    "    all_history.append(history.history['val_mean_absolute_error'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3 show the train loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "avg_mae_history=[np.mean([x[i] for x in all_history]) for i in range(epochs)]\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "plt.figure(figsize=(20,5)) #其中(5, 3)用于控制图片的大小\n",
    "plt.plot(range(1, len(avg_mae_history)+1), avg_mae_history)\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Validation MAE')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# smooth the loss line\n",
    "def smooth_curve(points, factor=0.9):\n",
    "    smoothed_points = []\n",
    "    for point in points:\n",
    "        if smoothed_points:\n",
    "            previous = smoothed_points[-1]\n",
    "            smoothed_points.append(previous * factor + point * (1 - factor))\n",
    "        else:\n",
    "            smoothed_points.append(point)\n",
    "    return smoothed_points\n",
    "\n",
    "smooth_mae_history = smooth_curve(avg_mae_history[10:])\n",
    "plt.plot(range(1, len(smooth_mae_history) + 1), smooth_mae_history)\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Validation MAE')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
